(*******************************************************************************
   Modulo: Main
   Descripcion: es el modulo principal que realiza las funciones asignadas por el CNU
   Autor: Jesús Reyes
   Fecha: 10/07/2012
 ******************************************************************************)

MODULE Main;

FROM NumberIO IMPORT ReadInt,WriteInt;
FROM StrLib IMPORT StrEqual;
FROM StrIO IMPORT WriteString, WriteLn, ReadString;   
FROM FpuIO IMPORT WriteReal, ReadReal;
FROM Assertion IMPORT Assert;
FROM FIO IMPORT OpenToRead,Close,File,Exists;
FROM DynamicStrings IMPORT String, ConCat, InitString,CopyOut, char;
FROM StringConvert IMPORT IntegerToString;
FROM Tad_Lista IMPORT Crear_Lista,Lista,Lista_Imprimir;
FROM Tad_ArbolBinomial IMPORT CrearArbol, Arbol;
FROM Tad_ControlEstudio IMPORT Carga_Archivo,Creditos;
FROM Tad_Inscripciones IMPORT Carga_Cursos, Carga_Solicitudes, Asignacion_Cursos_Obligatorios, Reporte_Cursos_Obligatorios, Solicitudes_NoAtendidas, Reporte_Materias;
IMPORT Tad_Solicitud;
IMPORT Tad_Curso;
IMPORT Tad_Estudiante;
IMPORT Tad_Profesor;
IMPORT Tad_Materia;
IMPORT Tad_Nota;

VAR salida: BOOLEAN;
VAR indice_comp: REAL;
VAR cod_materia,cod_profesor,num1,num2: INTEGER;
VAR i: INTEGER;
VAR resp,opcion: ARRAY [0..20] OF CHAR;
VAR archivo : ARRAY [0..20] OF CHAR;
VAR profesores : Lista;
VAR materias : Lista;
VAR estudiantes : Lista;
VAR notas : Lista;
VAR solicitudesNoAtendidas : Lista;
VAR archivoString :String;
VAR cursos : Lista;
VAR data: File;
VAR solicitudes: Arbol;

BEGIN
    
  WriteLn();
  WriteString('Bienvenido al programa centralizado del CNU');
  WriteLn();
  WriteString('Este programa esta diseñado para cargar y verificar las inscripciones de los estudiantes');
  WriteLn();
  
  WriteString('ingrese el nombre del archivo que contiene profesores, materias, estudiantes y notas. (ejemplo.txt): ');
  ReadString(archivo);

  estudiantes := Crear_Lista(Tad_Estudiante.Imprimir);
  materias := Crear_Lista(Tad_Materia.Imprimir);
  profesores := Crear_Lista(Tad_Profesor.Imprimir);
  notas := Crear_Lista(Tad_Nota.Imprimir);
  data := OpenToRead(archivo);
  Carga_Archivo (data,estudiantes,materias,profesores,notas);
  Close(data);

  WriteString('ingrese el nombre del archivo que contiene los datos de los cursos (ejemplo.txt): ');
  ReadString(archivo);

  cursos := Crear_Lista(Tad_Curso.Imprimir);
  data := OpenToRead(archivo);
  Carga_Cursos(data,cursos);
  Close(data);

  WriteString('ingrese el nombre del archivo que contiene los datos de las solicitudes (ejemplo.txt): ');
  ReadString(archivo);

  data := OpenToRead(archivo);
  solicitudes := Carga_Solicitudes(data,notas,estudiantes,materias);

  WriteLn();
  WriteString('desea continuar?(si/no)   ');
  ReadString(resp);
  
  WHILE StrEqual(resp,'si') DO
	WriteLn();
	WriteString('Que desea hacer ahora?, estas son las opciones:'); 
	WriteLn();
	WriteString('"1"(muestra un curso obligatorio y los estudiantes asignados a este, crea un archivo con los resagados)');
	WriteLn();
        WriteString('"2"(crea un archivo con la informacion de los estudiantes con solicitudes no atendidas)');
	WriteLn();	
	WriteString('"3"(crea un archivo con la informacion de la asignacion de los cursos)');
	WriteLn();	
	WriteString('"4"(crea un archivo con la informacion de las materias con alguna solicitud no atendida)');
	WriteLn();
	ReadInt(i);

	IF i = 1 THEN
                WriteLn();
                WriteString('ingrese el codigo de la materia');
                WriteLn();
                ReadInt(cod_materia);
                solicitudesNoAtendidas := Asignacion_Cursos_Obligatorios (cod_materia,materias,estudiantes,cursos,solicitudes);
                WriteLn();
                WriteString('lista de estudiantes no asignados creada');
                WriteLn();
                WriteString('desea ver la lista?');
                WriteLn();
                ReadString(resp);
                IF StrEqual(resp,'si') THEN
                        WriteLn();
                        Lista_Imprimir(solicitudesNoAtendidas);
                        WriteLn();
                END;
        ELSIF i = 3 THEN                       
                WriteLn();
                Reporte_Cursos_Obligatorios (estudiantes,cursos,solicitudes,materias);
                WriteString('archivo creado');
                WriteLn();

	ELSIF i = 2 THEN
                WriteLn();
                Solicitudes_NoAtendidas (estudiantes,solicitudes,cursos);
                WriteString('archivo creado');
                WriteLn();
                
	ELSIF i = 4 THEN
                WriteLn();
                Reporte_Materias(materias,solicitudes,cursos);
                WriteString('archivo creado');
                WriteLn();		

	ELSE
                WriteLn();
                WriteString('opcion incorrecta, vuelva a escribir una opcion');
                WriteLn();

	END;
	
	WriteString('desea continuar?(si/no)  ');
	ReadString(resp);
	
  END;
  
  WriteString('Gracias por usar este programa, Hasta luego!!');
  WriteLn();

END Main.
